ফাইল আপলোড এবং ডাউনলোড ওয়েব অ্যাপ্লিকেশনগুলিতে একটি সাধারণ প্রয়োজনীয়তা। JSP এবং Servlet ব্যবহার করে ফাইল আপলোড ও ডাউনলোড করা সম্ভব। এখানে আমরা JSP তে ফাইল আপলোড এবং ডাউনলোড করার জন্য সাধারণ উদাহরণ দেখব।
1. ফাইল আপলোড (File Upload)
ফাইল আপলোড করার জন্য সাধারণত Apache Commons FileUpload লাইব্রেরি ব্যবহার করা হয়, কারণ এটি ফাইলের আকার এবং ফর্ম ডেটা সহজেই প্রক্রিয়া করতে সক্ষম।
1.1 Apache Commons FileUpload লাইব্রেরি অন্তর্ভুক্ত করা
আপনার WEB-INF/lib ফোল্ডারে commons-fileupload.jar এবং commons-io.jar যোগ করতে হবে। এই লাইব্রেরিগুলো ডাউনলোড করা যেতে পারে Apache Commons FileUpload থেকে।
1.2 HTML ফর্ম তৈরি
ফাইল আপলোডের জন্য একটি HTML ফর্ম তৈরি করতে হবে, যা ফাইল নির্বাচন এবং আপলোডের জন্য ব্যবহার করা হবে।
<!DOCTYPE html>
<html>
<body>
<form action="upload" method="POST" enctype="multipart/form-data">
<label for="file">Choose a file:</label>
<input type="file" name="file" id="file">
<input type="submit" value="Upload">
</form>
</body>
</html>
এখানে, enctype="multipart/form-data" গুরুত্বপূর্ণ, কারণ এটি ফাইল ডেটা সঠিকভাবে পাঠানোর জন্য প্রয়োজনীয়।
1.3 JSP Servlet ফাইল আপলোড প্রসেসিং
এখন, ফাইল আপলোড প্রক্রিয়া করতে হবে, যা Servlet ক্লাসে সম্পন্ন হবে। নিচে একটি উদাহরণ দেওয়া হল যেখানে ফাইল আপলোড করা হচ্ছে:
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
import org.apache.commons.io.filefilter.*;
import java.io.*;
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// চেক করুন যে ফাইল আপলোড হচ্ছে কি না
if (!ServletFileUpload.isMultipartContent(request)) {
throw new ServletException("Content type is not multipart/form-data");
}
// ফাইল আপলোড প্রক্রিয়া শুরু করা
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = item.getName();
InputStream fileContent = item.getInputStream();
// ফাইল সেভ করার জন্য একটি ডিরেক্টরি তৈরি করা
File file = new File("C:/uploads/" + fileName);
try (FileOutputStream fos = new FileOutputStream(file)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileContent.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
}
response.getWriter().println("File uploaded successfully.");
}
}
} catch (Exception e) {
e.printStackTrace();
response.getWriter().println("Error during file upload.");
}
}
}
এখানে, ফাইলটি C:/uploads/ ফোল্ডারে সেভ করা হচ্ছে। আপনি আপনার সিস্টেম অনুযায়ী পাথ পরিবর্তন করতে পারেন।
2. ফাইল ডাউনলোড (File Download)
ফাইল ডাউনলোড করার জন্য আমরা একটি Servlet তৈরি করব যা ক্লায়েন্টের কাছে ফাইলটি পাঠাবে।
2.1 HTML ফর্মে ফাইল ডাউনলোড লিঙ্ক
একটি HTML ফর্ম তৈরি করে ফাইল ডাউনলোড করার জন্য একটি লিঙ্ক প্রদান করা যেতে পারে।
<!DOCTYPE html>
<html>
<body>
<a href="download?fileName=testfile.txt">Download File</a>
</body>
</html>
এখানে testfile.txt ফাইলটি ডাউনলোড করার জন্য একটি লিঙ্ক তৈরি করা হয়েছে।
2.2 JSP Servlet ফাইল ডাউনলোড প্রসেসিং
এখন, ফাইল ডাউনলোডের জন্য একটি Servlet তৈরি করা হবে। নিচে একটি উদাহরণ দেওয়া হল:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");
String filePath = "C:/uploads/" + fileName;
File file = new File(filePath);
if (file.exists()) {
response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
try (FileInputStream fis = new FileInputStream(file);
OutputStream out = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
} else {
response.getWriter().println("File not found.");
}
}
}
এখানে, FileDownloadServlet ক্লাসটি ফাইলটি C:/uploads/ ফোল্ডার থেকে ডাউনলোড করবে। এটি Content-Disposition হেডারের মাধ্যমে ডাউনলোড করার জন্য ফাইলটি প্রেরণ করবে।
সার্বিক পর্যালোচনা
ফাইল আপলোড এবং ডাউনলোড জেএসপি এবং সার্ভলেট ব্যবহার করে কার্যকরভাবে করা সম্ভব। Apache Commons FileUpload লাইব্রেরি ব্যবহার করে ফাইল আপলোড প্রক্রিয়া সহজ করা হয় এবং Servlet ব্যবহার করে ফাইল ডাউনলোডের জন্য প্রয়োজনীয় হেডার এবং আউটপুট স্ট্রিম সেট করা হয়। এই প্রযুক্তিগুলি ওয়েব অ্যাপ্লিকেশনগুলিতে ফাইল ম্যানিপুলেশন, আপলোড ও ডাউনলোড সহজ করে তোলে।
Read more